package app.dis.servicios;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;

import org.jboss.logging.Logger;

import app.dis.accesoadatos.dao.ClienteDAO;
import app.dis.accesoadatos.dao.CuentaDAO;
import app.dis.accesoadatos.dao.EntidadesFinancierasDAO;
import app.dis.accesoadatos.dao.TransaccionDAO;
import app.dis.accesoadatos.entidades.Cuenta;
import app.dis.accesoadatos.entidades.EntidadesFinancieras;
import app.dis.accesoadatos.entidades.MensajeRespuesta;
import app.dis.accesoadatos.entidades.MovimientoPOJO;
import app.dis.accesoadatos.entidades.Transaccion;
import app.dis.resources.Reloj;

@Path(value = "servicio")
public class TransaccionServicios {

	Logger log = Logger.getLogger(this.getClass().getName());

	@Inject
	TransaccionDAO transaccionDAO;

	@Inject
	ClienteDAO clienteDAO;

	@Inject
	CuentaDAO cuentaDAO;

	@Inject
	EntidadesFinancierasDAO entidadesFinacierasDAO;

	Reloj r = new Reloj();

	@POST
	@Path("/depositar")
	@Produces("application/json")
	@Consumes("application/json")
	public MensajeRespuesta insertarTransaccion(MovimientoPOJO movimientoPOJO) {

		MensajeRespuesta msj = new MensajeRespuesta();

		Cuenta cuenta = cuentaDAO.ConsultarCuenta(movimientoPOJO
				.getNumCuentaDestino());

		if (cuenta != null) {

			

			Transaccion transaccion = new Transaccion();

			transaccion.setCedulaDestinatario(movimientoPOJO
					.getCedulaDestinatario());
			transaccion.setDescripcion(movimientoPOJO.getDescripcion());
			transaccion.setMontoTransferencia(0);
			transaccion.setNumCuentaDestino(cuenta.getNumeroCuenta());
			transaccion.setNmCuentaOrigen(movimientoPOJO.getCuentaOrigen());
			transaccion.setSaldoAnterior(cuenta.getSaldoActual() + "");
			transaccion.setUnaCuenta(cuenta);
			transaccion.setUnaEntidadFinan(entidadesFinacierasDAO
					.getBanco(movimientoPOJO.getEntidadFinanciera()));
			transaccion.setHora(movimientoPOJO.getHora());
			transaccion.setFecha(movimientoPOJO.getFecha());
			transaccion.setCorreoDestino(movimientoPOJO.getCorreoDestino());
			transaccion.setTipoTran("RECIBE DEPOSITO");

			boolean res = transaccionDAO.insertar(transaccion);
			cuenta.setSaldoActual(cuenta.getSaldoActual()
					+ movimientoPOJO.getValorATransferir());
			cuentaDAO.Actualiza(cuenta);
			
			
			if (res) {
				msj.setCodigo(2);
				msj.setMensaje("Correcto");
				// Notificaciones mensajes=new Notificaciones();
				// String asunto="Transferencia";
				// String
				// mensaje="Se ah Relizado Una transferencia de "+transaccion.getMontoATrasferir()
				// +"De la Cuenta"+transferencia.getNumCuentaOrigen()+" ";

				/*
				 * try { mensajes.enviarMail(asunto,
				 * mensaje,cuenta.getCliente().getCorreo()); } catch
				 * (JMSException e) { // TODO Auto-generated catch block
				 * e.printStackTrace(); }
				 */

				return msj;
			} else {
				msj.setCodigo(4);
				msj.setMensaje("No se pudo Guardar");
				return msj;
			}

		} else {

			msj.setCodigo(5);
			msj.setMensaje("ERROR NO EXISTE LA CUENTA");

			return msj;
		}

	}

	@POST
	@Path("/login")
	@Produces("application/json")
	@Consumes("application/json")
	public MensajeRespuesta Login(MovimientoPOJO movimientoPOJO) {

		MensajeRespuesta msj = new MensajeRespuesta();

		boolean logueado = clienteDAO.login(movimientoPOJO.getUsuario(),
				movimientoPOJO.getContrasena());
		if (logueado) {
			msj.setCodigo(10);
			msj.setMensaje("Logueado");
		} else {
			msj.setCodigo(11);
			msj.setMensaje("No Logueado");
		}

		log.info("RETORNANDO " + msj.getCodigo());
		return msj;

	}

	@POST
	@Path("/bancos")
	@Produces("application/json")
	@Consumes("application/json")
	public List<EntidadesFinancieras> entidadesFinancieras() {

		return entidadesFinacierasDAO.getEntidadesFinancieras();
	}
}
